/*
 * PolisherOperator.h
 *
 *  Created on: 2018年8月8日
 *      Author: zhengboyuan
 */

#ifndef POLISHEROPERATOR_H_
#define POLISHEROPERATOR_H_

#include <windef.h>
#include <stddef.h>
#include <string.h>

///////////////////////////////////////////////////////////////////
#ifdef WIN32
    #ifndef DLLEXPORT
    #define DLLEXPORT __declspec(dllexport)
    #endif //DLLEXPORT
#else
    #ifndef DLLEXPORT
    #define DLLEXPORT __attribute__ ((visibility ("default")))
    #endif //DLLEXPORT
#endif //WIN32

///////////////////////////////////////////////////////////////////

/////////////////////////////////////////////////////////////////////////////
#ifdef __cplusplus
extern "C"
{
#endif

/////////////////////////////////////////////////////////////////////////////

/// 运行状态.
typedef enum Po_Status
{
    PO_STATUS_RUNNING = 0,
    PO_STATUS_STOPPED = 1

} Po_Status;


/// 操作.
typedef enum Po_Operation
{
    PO_OP_NONE = 0, /// 无效操作.
    PO_OP_START = 1, /// 开始.
    PO_OP_STOP = 2, /// 停止.

    PO_OP_MACHINE_ON = 3,   /// 电机电源开.
    PO_OP_LIQUID_ON  = 4,   /// 液体电源开.
    PO_OP_MOTOR_ON   = 5,    /// 马达电源开.
    PO_OP_MAIN_ON   = 6,     /// 总阀电源开.

    PO_OP_MACHINE_OFF = 7,  /// 电机电源关.
    PO_OP_LIQUID_OFF  = 8,
    PO_OP_MOTOR_OFF  = 9,
    PO_OP_MAIN_OFF = 10,

    PO_OP_MACHINE_RESET_X = 11, /// 恢复机械原点X轴.
    PO_OP_MACHINE_RESET_Y = 12,
    PO_OP_MACHINE_RESET_Z = 13,

    PO_OP_WORK_RESET_X = 14,
    PO_OP_WORK_RESET_Y = 15,
    PO_OP_WORK_RESET_Z = 16,    /// 恢复工作原点Z轴.

    PO_OP_CONFIRM = 17, /// 确认.
    PO_OP_CANCEL = 18,  /// 取消.
    PO_OP_SET = 19,     /// 设置.

    PO_OP_SPEED_LOW = 20,       /// 低速.
    PO_OP_SPEED_MIDDLE = 21,    /// 中速.
    PO_OP_SPEED_HIGH = 22,  /// 高速.

    PO_OP_AXIS_X_DEC = 23,  /// X轴减小.
    PO_OP_AXIS_X_INC = 24,  /// X轴增加.
    PO_OP_AXIS_Y_INC = 25,  /// Y轴增加, 向上.
    PO_OP_AXIS_Y_DEC = 26,  /// Y轴减小.
    PO_OP_AXIS_Z_INC = 27,  /// Z轴增加, 向上.
    PO_OP_AXIS_Z_DEC = 28,  /// Z轴减小.

	PO_OP_TIME_INC = 29,  /// 增加抛光时间.
	PO_OP_TIME_DEC = 30,  /// 减小抛光时间.

} Po_Operation;


/// 显示码.
typedef enum Po_DisplayCode
{
    PO_DISPLAY_STATUS = 0,  /// 显示机器状态.
    PO_DISPLAY_X,           /// 显示变量X的值.
    PO_DISPLAY_Y,
    PO_DISPLAY_Z,
	PO_DISPLAY_TIME		/// 抛光时间.

} Po_DisplayCode;

/////////////////////////////////////////////////////////////////////////////

/**
 * 初始化.
 */
DLLEXPORT void Po_Init();

/**
 * 退出清理.
 */
DLLEXPORT void Po_Quit();

/**
 * 操作.
 * @param op    操作码.
 */
DLLEXPORT void Po_Operate(Po_Operation op);

/**
 * 设置显示回调.
 * @param code  显示码. @see Po_DisplayCode
 * @param value 值.
 * @param user  用户数据指针.
 */
typedef void (*PoDisplayCallback)(int code, int value, void* user);

/**
 * 设置显示回调.
 * @param cb    回调函数.
 * @param user  用户指针
 */
DLLEXPORT void Po_SetDisplayCallback(PoDisplayCallback cb, void* user);

/**
 * 显示.
 * 该接口可以在库内或者库外调用.
 * @param code  显示码, @see Po_DisplayCode
 * @param value 值.
 */
DLLEXPORT void Po_Display(int code, int value);

/**
 * 设置串口.
 * 该接口可以在库内或者库外调用.
 * @param port  串口名称, 比如 COM3
 * @param baudrate 波特率
 */
DLLEXPORT void Po_SetupSerialPort(const char* port, int baudrate);

/**
 * 发送数据到串口.
 * 该接口可以在库内或者库外调用.
 * @param data      数据指针.
 * @param length    数据长度.
 */
DLLEXPORT void Po_SendDataTo232(const char* data, int length);


/////////////////////////////////////////////////////////////////////////////

#ifdef __cplusplus
}
#endif

#endif /* POLISHEROPERATOR_H_ */
